package com.jt.redis;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

/**
 * 基于Redis实现一个简单的多线程抢票操作
 * 这个操作中重点演示一下乐观锁的应用
 */
public class SecondKillDemo02 {
    static void secondKillTicker(){
        //1、建立Redis连接
        Jedis jedis = JedisDataSource.getConnection();
        //2、监控Redis中指定的key

        jedis.watch("ticket","money");
        //3、开启事务
        Transaction multi = jedis.multi();
        multi.decr("ticket");
        multi.incrBy("money", 100);
        //4、提交事务
        multi.exec();
        //5、取消监控
        jedis.unwatch();
        //6、释放资源
        jedis.close();
    }

    public static void main(String[] args) {
        //1、定义Redis初始化数据
        Jedis jedis = JedisDataSource.getConnection();
        jedis.set("ticket", "1");
        jedis.set("money", "0");
        jedis.close();
        //2、创建多个线程，在线程中执行抢票操作
        Thread t1 = new Thread(new Runnable(){

            @Override
            public void run() {
                //执行抢票
                secondKillTicker();
            }
        });
        Thread t2 = new Thread(new Runnable(){

            @Override
            public void run() {
                //执行抢票
                secondKillTicker();
            }
        });
        //3、启动多个线程
        t1.start();
        t2.start();
    }
}
